package cn.feizhu.aimarket.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.StpUtil;
import cn.feizhu.aimarket.common.BaseResponse;
import cn.feizhu.aimarket.common.ResultUtils;
import cn.feizhu.aimarket.model.domain.App;
import cn.feizhu.aimarket.model.domain.Book;
import cn.feizhu.aimarket.model.dto.app.AppAddRequest;
import cn.feizhu.aimarket.model.vo.BookVO;
import cn.feizhu.aimarket.service.AppService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/app")
public class AppController {

    @Resource
    private AppService appService;

    /**
     * 创建应用（仅管理员可操作）
     *
     * @param appAddRequest 应用创建请求
     * @return 创建的应用ID
     */
    @SaCheckRole("admin")
    @PostMapping("/create")
    public BaseResponse<Long> createApp(@RequestBody AppAddRequest appAddRequest) {
//         从Sa-Token获取当前登录用户ID
        Long userId = (Long) StpUtil.getSession().get("userId");

        // 调用Service层创建应用
        Long appId = appService.createApp(appAddRequest, userId);

        return ResultUtils.success(appId);
    }


    /**
     * 预聊天接口，获取初始的聊天内容 存入ThreadLocal中获取APP信息
     */
    @SaCheckLogin
    @GetMapping("/preChat")
    public BaseResponse<?> preChat(@RequestParam Long appId) {
        // 用户登录的时候设置的 TODO 这个session是不是会过期，然后这个可能session没有
        long userId = (long) StpUtil.getSession().get("userId");
        // 这里存入AppId，后面创建文本的时候用到
        StpUtil.getSession().set("appId", appId);
        // TODO 这里进行加载应用信息操作，使用多表查询获取到已经创建的books
        List<BookVO> books = appService.loadBooksVO(appId, userId);
        return ResultUtils.success(books);
    }

    /**
     * 获取公开应用列表
     * 这里就不用登录拦截了，所有人都可以使用
     * 不用VO是因为都可以展示
     */
    @SaIgnore
    @GetMapping("/list")
    public BaseResponse<List<App>> listApps() {
        List<App> appList = appService.listApps();
        return ResultUtils.success(appList);
    }


}
